package com.itheima.tliasmanager.controller;

import com.itheima.tliasmanager.annotation.Time;
import com.itheima.tliasmanager.pojo.domain.Emp;
import com.itheima.tliasmanager.pojo.vo.PageResult;
import com.itheima.tliasmanager.pojo.dto.QueryParam;
import com.itheima.tliasmanager.pojo.vo.Result;
import com.itheima.tliasmanager.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.io.FileNotFoundException;
import java.util.List;

@Slf4j//日志
@RequestMapping("/emps")
@RestController
public class EmpController {

    @Autowired
    private EmpService empService;


    /**
     * 定义处理器方法，处理员工列表查询的请求
     */
    @GetMapping
    public Result page(QueryParam queryParam){
        //1.接收请求参数：kv格式
        //请求参数数量较多的：推荐定义实体对象接收
        log.info("分页查询员工列表，参数：{}",queryParam);

        //2.调用service业务方法，获取员工列表
        PageResult<Emp> pageResult = empService.page(queryParam);

        //3.封装并返回结果数据
        return Result.success(pageResult); //code=1,msg='success',data=pageResult(total/rows)
    }


    /**
     * 定义处理器方法，处理添加员工请求
     */
    @PostMapping
    public Result save(@RequestBody Emp emp) throws FileNotFoundException {
        //1.接收请求参数：json格式
        //@RequestBody  +  实体对象
        log.info("保存员工，请求参数：{}" , emp);

        //2.调用service业务方法，保存员工数据
        empService.saveEmp(emp);

        //3.封装并返回结果数据
        return Result.success();//code = 1,msg='success',data=null
    }


    /**
     * 定义处理器方法，处理批量删除员工请求
     */
    @DeleteMapping
    public  Result batchRemove(/*Integer[] ids*/ @RequestParam List<Integer> ids){
        //1.接收请求参数：待删除的一批员工id
        //kv格式：ids = 1,2,3,4,5
        log.info("批量删除员工，参数：{}",ids);

        //2.调用service业务方法，批量删除员工数据
        empService.batchRemove(ids);

        //3.封装并返回结果数据
        return Result.success();//code = 1,msg='success',data=null
    }


    /**
     * 定义处理器方法，处理查询员工详情信息请求
     */
    @Time
    @GetMapping("/{id}")
    public  Result queryDetail( @PathVariable Integer id  ){
        //1.接收请求参数：待查询的员工id
        //path路径参数：@PathVariable  +  变量
        log.info("查询员工详情，id = {}",id);

        //2.调用service业务方法，获取员工详情数据
        Emp emp = empService.queryDetail(id);

        //3.封装并返回结果数据
        return Result.success(emp); //code=1  ,msg=success ,data=查询到的员工详情数据
    }

    /**
     * 定义接口方法，实现更新员工信息
     */
    @PutMapping
    public Result  update(@RequestBody Emp emp){
        //1.接收请求参数：待更新的员工信息
        //json格式：@RequestBody + 实体对象
        log.info("更新员工，参数：{}",emp);

        //2.调用service业务方法，更新员工数据
        empService.updateEmp(emp);

        //3.封装并返回结果数据
        return Result.success();//code=1  ,msg=success ,data=null
    }


}











